package com.xsg.printer.core;

import com.xsg.printer.core.enums.VoucherConstants;
import lombok.Getter;

import java.util.function.Function;

/**
 * 画板
 * @param <T>
 */
@Getter
public abstract class VoucherBoard<T, P extends VoucherPaint<T>> {

    /**
     * 打印文件存放路径
     */
    protected static final String PRINT_PATH = VoucherConstants.PRINT_PATH;

    /**
     * 高度
     */
    private final int height;

    /**
     * 宽度
     */
    private final int width;

    /**
     * 背景颜色
     */
    private final int bgColor;

    /**
     * 画板容器
     */
    private T container;

    public VoucherBoard(int height, int width, int bgColor) {
        this.height = height;
        this.width = width;
        this.bgColor = bgColor;
        //创建容器
        this.container = createContainer();
    }

    public abstract T createContainer();

    /**
     * 获取画笔
     * @return
     */
    public abstract P getPaint();

    /**
     * 获取结果(输出文件存储路径)
     * @return
     */
    public abstract String getResult();

    /**
     * 自定义输出结果
     * @param function
     * @param <R>
     * @return
     */
    private <R> R getCustomResult(Function<T, R> function) {
        return function.apply(container);
    }
}
